package bank

import "sync"

var (
	mu      sync.RWMutex
	balance int
)

func Add(amount int) {
	mu.Lock()
	defer mu.Unlock()
	balance = balance + amount
	// mu.Unlock() //临界区
}

func Balance() int {
	mu.Lock()
	b := balance
	mu.Unlock() //defer mu.Unlock()
	return b
}

func Init() {
	mu.RLock()
	mu.RUnlock()
	balance = 0
}

//如果是defer mu.Unlock()写法，临界区会隐式地延伸到函数作用域的最后
//goroutine在结束后释放锁是必要的，无论以哪条路径通过函数都需要释放，即使是在错误路径中，也要记得释放。
